/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;


import domain.Entity.EntityTarea;
import domain.commands.TareaComando;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import managers.TareaManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class datosTareaController extends SimpleFormController{
    
    TareaManager tm = TareaManager.getInstance();
    
    public datosTareaController() {
        setCommandClass(TareaComando.class);
  }
  
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception {
 
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession();
        TareaComando tc = (TareaComando) command;
        
        EntityTarea et = (EntityTarea) session.getAttribute("tarea");
        
        String etiqueta = "";
        List l = new ArrayList();
        StringTokenizer st = new StringTokenizer(tc.getEtiqueta());
        while(st.hasMoreTokens()){
            String s = st.nextToken();
            if(!l.contains(s)){
                l.add(s);
            }
        }
        Collections.sort(l);
        Iterator it = l.iterator();
        while(it.hasNext()){
            etiqueta = etiqueta.concat((String) it.next()+" ");
        }
        
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        boolean principio = false;
        boolean fin = false;
        Date fecIni = null;
        Date fecFin = null;
        if(!tc.getFechaIni().equals("")){
            fecIni = sdf.parse(tc.getFechaIni());
            if(fecIni.compareTo(et.getEpy().getFecha_ini()) < 0){
                    principio = true;
            }
        }
        if(!tc.getFechaFin().equals("")){
            fecFin = sdf.parse(tc.getFechaFin());
             if(fecFin.compareTo(et.getEpy().getFecha_fin()) > 0){
                    fin = true;                    
            }
        }
        String completado = tc.getCompletado();
        boolean comp = false;
        if(completado !=null){
            if(completado.equals("ON") || completado.equals("on")){
                comp = true;
            }
        }
        
        long idProyecto = et.getEpy().getIdProyecto();
        if(!tc.getNombreTarea().equals(et.getNombreTarea())){
            
                if(estaTarea(idProyecto,tc.getNombreTarea()) ){
            
                        mav.setView(new RedirectView("error.htm"));
                        return mav;
                 }
        } 
        if(principio || fin  ){
            mav.setView(new RedirectView("error.htm"));
            return mav;
        }
            
        et.setNombreTarea(tc.getNombreTarea());
        et.setFecha_ini(fecIni);
        et.setFecha_fin(fecFin);
        et.setCompletado(comp);
        et.setEtiquetas(etiqueta);
    
        tm.modificarTarea(et);
        mav.setView(new RedirectView("mostrarTareas.htm"));
            
        
        return mav;
        
    }
    
    private boolean estaTarea(long idProyecto,String nombre){
        
         EntityTarea et = tm.getPorNombreYProyecto(nombre, idProyecto);
         
         return (et.getNombreTarea() != null) ;
        
    }
        
    
}

